//===--- Edit.cpp - Misc edit utilities -----------------------------------===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//

#include "llvm/Support/raw_ostream.h"
#include "polarphp/basic/Edit.h"
#include "polarphp/basic/SourceMgr.h"

void polar::
writeEditsInJson(ArrayRef<SingleEdit> AllEdits, llvm::raw_ostream &OS) {
   OS << "[\n";
   for (auto &Edit : AllEdits) {
      SourceManager &SM = Edit.SM;
      CharSourceRange Range = Edit.Range;
      StringRef Text = Edit.Text;
      SourceLoc Loc = Range.getStart();
      unsigned BufID = SM.findBufferContainingLoc(Loc);
      unsigned Offset = SM.getLocOffsetInBuffer(Loc, BufID);
      unsigned Length = Range.getByteLength();
      StringRef Path(SM.getIdentifierForBuffer(BufID));

      OS << " {\n";
      OS << "  \"file\": \"";
      OS.write_escaped(Path) << "\",\n";
      OS << "  \"offset\": " << Offset << ",\n";
      if (Length != 0)
         OS << "  \"remove\": " << Length << ",\n";
      if (!Text.empty()) {
         OS << "  \"text\": \"";
         OS.write_escaped(Text) << "\",\n";
      }
      OS << " },\n";
   }
   OS << "]\n";
}
